﻿#include <iostream>
#include <deque>
#include <vector>
#include <algorithm>
//算法头文件 algorithm
/*
容器（Container），是一种数据结构，如list，vector，和deques ，以模板类的方法提供。为了访问容器中的数据，可以使用由容器类输出的迭代器；
迭代器（Iterator），提供了访问容器中对象的方法。例如，可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上，C++的指针也是一种迭代器。但是，迭代器也可以是那些定义了operator* ()以及其他类似于指针的操作符地方法的类对象；
算法（Algorithm），是用来操作容器中的数据的模板函数。例如，STL用sort()来对一个vector中的数据进行排序，用find()来搜索一个list中的对象，函数本身与他们操作的数据的结构和类型无关，因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用；
仿函数（Functor）
适配器（Adaptor）
分配器（allocator）
————————————————
*/
//Vector 容器
using namespace std;
void vct() {
    vector<int> vec1;    //默认初始化，vec1为空
    vector<int> vec2(vec1);  //使用vec1初始化vec2
    vector<int> vec3(vec1.begin(), vec1.end());//使用vec1初始化vec2
    vector<int> vec4(10);    //10个值为0的元素
    vector<int> vec5(10, 4);  //10个值为4的元素
    vector<string> vec6(10, "null");    //10个值为null的元素
    vector<string> vec7(10, "hello");  //10个值为hello的元素

    vec1.push_back(100);            //添加元素
    int size = vec1.size();         //元素个数
    bool isEmpty = vec1.empty();    //判断是否为空
    cout << vec1[0] << endl;        //取得第一个元素
    vec1.insert(vec1.end(), 5, 3);    //从vec1.back位置插入5个值为3的元素
    vec1.pop_back();              //删除末尾元素
    vec1.erase(vec1.begin(), vec1.end());//删除之间的元素，其他元素前移
    cout << (vec1 == vec2) ? true : false;  //判断是否相等==、！=、>=、<=...
    vector<int>::iterator iter = vec1.begin();    //获取迭代器首地址
    vector<int>::const_iterator c_iter = vec1.begin();   //获取const类型迭代器
    vec1.clear();                 //清空元素
    int length = vec1.size();
    /// <summary>
    /// vector 遍历
    /// </summary>
    for (int i = 0; i < length; i++)
    {
        cout << vec1[i];
    }
    cout << endl << endl;
    //迭代器法
    
    vector<int>::const_iterator iterator = vec1.begin();
    for (; iterator != vec1.end(); iterator++)
    {

        cout << *iterator << endl;

    }
    
   
}
//人羊狼菜 过河问题 

/*
STL 之 deque容器
*/
int main()
{
    
}


